package pl.un4giv3n.mightvsmagic.action.clan;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import pl.un4giv3n.mightvsmagic.utils.ClanUtil;

public class ImproveBarracksAction extends ClanAction {

	private static final long serialVersionUID = 1L;

	@Override
	public String execute() {
		EntityManager entityManager = getEntityManager();
		user = getSessionUser(entityManager);
		if (user == null) {
			addActionError("Zaloguj się");
			entityManager.close();
			return LOGIN;
		}
		clan = user.getClan();
		if (clan == null || !isClanAdmin()) {
			entityManager.close();
			addActionError("Wybrany klan nie istnieje lub niewystarczające uprawnienia.");
			return ERROR;
		} else {
			if(clan.getBarracksLevel() >= MAX_BARRACKS_LEVEL){
				entityManager.close();
				addActionError("Nie można bardziej rozbudować");
				return ERROR;
			}
			long barracksImprovementCost = ClanUtil.getBarracksImprovementCost(clan);
			if(clan.getGold() < barracksImprovementCost){
				entityManager.close();
				addActionError("Niewystarczająca ilość złota do rozbudowy");
				return ERROR;
			}
			EntityTransaction transaction = entityManager.getTransaction();
			transaction.begin();
			clan.improveBarracksLevel(1);
			clan.removeGold(barracksImprovementCost);
			entityManager.merge(clan);
			entityManager.flush();
			transaction.commit();
		}
		entityManager.close();
		return SUCCESS;
	}

}
